﻿namespace System {

    public interface IReadOnlyF64ComplexData : IReadOnlyComplexData<F64>, IReadOnlyF64Data { }
    public interface IValueChangedF64ComplexData : IReadOnlyF64ComplexData, IValueChangedData<F64>, IValueChangedF64Data { }
    public interface IF64ComplexData : IValueChangedF64ComplexData, IComplexData<F64> { }

    [Implement(typeof(IReadOnlyF64ComplexData))]
    [Implement(typeof(IValueChangedF64ComplexData))]
    [Implement(typeof(IF64ComplexData))]
    [Implement(typeof(IReadOnlyComplexData<F64>))]
    [Implement(typeof(IValueChangedComplexData<F64>))]
    [Implement(typeof(IComplexData<F64>))]
    internal sealed class KHBD_F64ComplexData : KHBD_ComplexData<F64>, IF64ComplexData {

        protected override F64 Calculate() => Base.Value * Factor.Value + Additional.Value;

        protected override F64 GetDefaultMaxValue() => F64.MaxValue;

        protected override F64 GetDefaultMinValue() => F64.MinValue;

        protected override F64 Clamp(F64 value, F64 min, F64 max) => F64.Clamp(value, min, max);
    }
}